package com.shen.plugins.transform

import com.android.build.api.transform.DirectoryInput;
import com.android.build.api.transform.QualifiedContent
import com.android.build.api.transform.Status;
import com.android.build.api.transform.Transform;

import org.gradle.internal.hash.Hashing;

import java.io.File
import java.lang.reflect.Field;
import java.nio.charset.Charset;
import java.util.Set;

import kotlin.text.Charsets;

public abstract class BaseTransform extends Transform {


    protected final Transform origTransform;

    public BaseTransform(Transform origTransform) {
        this.origTransform = origTransform;
    }

    /**
     * 处理的数据类型  classed 表示字节码  resource 表示标准的java资源
     * @return
     */
    @Override
    public Set<QualifiedContent.ContentType> getInputTypes() {
        return origTransform.getInputTypes();
    }

    /**
     * 作用域
     * PROJECT 只处理当前项目
     *SUB_PROJECT 只处理子项目
     * PROJECT_LOCAL_DEPS 只处理当前项目的本地依赖
     * EXTERNAL_LIBRARIES 只处理外部的依赖库
     * PROVIDED_ONLY 只处理本地或远程以provided形式引入的依赖库
     * TESTED_CODE 测试代码
     * @return
     */
    @Override
    public Set<? super QualifiedContent.Scope> getScopes() {
        return origTransform.getScopes();
    }

    @Override
    public boolean isIncremental() {
        return origTransform.isIncremental();
    }


    public String getUniqueName(File mFile){
        final String origJarName=mFile.getName();
        final String hashing= Hashing.sha1().hashString(mFile.getPath()).toString()

        final int dotPos=origJarName.lastIndexOf(".")

        if (dotPos<0){
            return origJarName+"_"+hashing
        }else{
            final String nameWithoutDotExt = origJarName.substring(0, dotPos)
            final String dotExt = origJarName.substring(dotPos)
            return "${nameWithoutDotExt}_${hashing}${dotExt}"
        }





    }


    protected void replaceFile(QualifiedContent input,File newFile){


    }


    protected void replaceChangeFile(DirectoryInput dirInput,Map<File,Status> changedFiles){
//        final Field changedFilesField = ReflectUtil.getDeclaredFieldRecursive(dirInput.getClass(), 'changedFiles')

    }
}
